package com.yfbao.horizon.inspection.service;

import com.yfbao.horizon.inspection.config.InspectConfig;
import com.yfbao.horizon.inspection.config.ReportTaskConfig;
import com.yfbao.horizon.inspection.dto.ReportDto;
import com.yfbao.horizon.inspection.dto.ReportInfoResult;
import com.yfbao.horizon.inspection.entity.SystemInspectRecord;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 巡检系统服务接口
 * 定义巡检系统的核心业务方法
 */
public interface InspectionService {

    /**
     * 执行巡检任务
     * @param config 巡检配置
     * @param reportConfig 报告任务配置
     * @return 巡检报告
     */
    ReportDto executeInspectionTask(InspectConfig config, ReportTaskConfig reportConfig);

    /**
     * 执行自定义巡检任务
     * @param config 巡检配置
     * @param reportConfig 报告任务配置
     * @return 巡检报告
     */
    ReportDto executeCustomInspectionTask(InspectConfig config, ReportTaskConfig reportConfig);

    /**
     * 采集巡检指标
     * @param config 巡检配置
     * @return 巡检记录
     */
    SystemInspectRecord collectInspectionMetrics(InspectConfig config);

    /**
     * 执行自定义指标采集
     * @param config 巡检配置
     * @return 巡检记录
     */
    SystemInspectRecord collectCustomInspectionMetrics(InspectConfig config);

    /**
     * 执行周期扫描
     * @param config 巡检配置
     */
    void executePeriodicScan(InspectConfig config);

    /**
     * 获取巡检报告详情
     * @param taskNo 任务编号
     * @return 报告详情列表
     */
    List<ReportInfoResult> getReportInfo(String taskNo);

    /**
     * 保存巡检记录
     * @param record 巡检记录
     * @return 保存后的巡检记录
     */
    SystemInspectRecord saveInspectionRecord(SystemInspectRecord record);

    /**
     * 批量保存巡检记录
     * @param records 巡检记录列表
     * @return 保存后的巡检记录列表
     */
    List<SystemInspectRecord> batchSaveInspectionRecords(List<SystemInspectRecord> records);

    /**
     * 根据环境和分类查询巡检记录
     * @param inspectEnv 巡检环境
     * @param inspectCategory 巡检分类
     * @return 巡检记录列表
     */
    List<SystemInspectRecord> findRecordsByEnvAndCategory(String inspectEnv, String inspectCategory);

    /**
     * 根据检测项查询巡检记录
     * @param inspectItem 检测项
     * @return 巡检记录列表
     */
    List<SystemInspectRecord> findRecordsByInspectItem(String inspectItem);

    /**
     * 根据时间范围查询巡检记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 巡检记录列表
     */
    List<SystemInspectRecord> findRecordsByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 删除过期的巡检记录
     * @param expireTime 过期时间
     * @return 删除的记录数
     */
    int deleteExpiredRecords(LocalDateTime expireTime);

    /**
     * 根据环境和过期时间删除记录
     * @param inspectEnv 巡检环境
     * @param expireTime 过期时间
     * @return 删除的记录数
     */
    int deleteExpiredRecordsByEnv(String inspectEnv, LocalDateTime expireTime);

    /**
     * 根据分类和过期时间删除记录
     * @param inspectCategory 巡检分类
     * @param expireTime 过期时间
     * @return 删除的记录数
     */
    int deleteExpiredRecordsByCategory(String inspectCategory, LocalDateTime expireTime);

    /**
     * 获取巡检统计信息
     * @param inspectEnv 巡检环境
     * @param inspectCategory 巡检分类
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计信息
     */
    Map<String, Object> getInspectionStatistics(String inspectEnv, String inspectCategory, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取所有巡检引擎的编码列表
     * @return 引擎编码列表
     */
    List<String> getAllEngineCodes();

    /**
     * 根据引擎编码获取引擎实例
     * @param engineCode 引擎编码
     * @return 引擎实例或null
     */
    Object getEngineByCode(String engineCode);
}